from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer    #文本特征提取
from sklearn.model_selection import train_test_split           #数据集分割
from sklearn import svm

newsgroups_train=fetch_20newsgroups(subset='all')
select=['alt.atheism','talk.religion.misc','comp.graphics']    #选取三类新闻做训练，target分别为012
newsgroups_train_se=fetch_20newsgroups(subset='train', categories=select)

vectorizer=TfidfVectorizer()         # #TF-IDF进行处理
vectors=vectorizer.fit_transform(newsgroups_train_se.data)

x_train,x_test,y_train,y_test=train_test_split(vectors,newsgroups_train_se.target,test_size=0.2,random_state=256)
#8-2开分割数据集为训练集合测试集
# #一共有1441则新闻，每则新闻便封装成了26488维向量，每一维向量代表了这一单词经过TF-IDF处理后的出现的频率统计
svc=svm.SVC(kernel='linear')            #线性核函数,svc是SVM的一种
svc.fit(x_train,y_train)
print(svc.score(x_test,y_test))



'''
TF-IDF(term frequency-inverse document frequency)词频-逆向文件频率。
在处理文本时，如何将文字转化为模型可以处理的向量呢？TF-IDF就是这个问题的解决方案之一。
字词的重要性与其在文本中出现的频率成正比(TF)，与其在语料库中出现的频率成反比(IDF)。

TF
TF：词频。TF(w)=(词w在文档中出现的次数)/(文档的总词数)

IDF
IDF：逆向文件频率。有些词可能在文本中频繁出现，但并不重要，也即信息量小，如is,of,that这些单词，
这些单词在语料库中出现的频率也非常大，我们就可以利用这点，降低其权重。
IDF(w)=log_e(语料库的总文档数)/(语料库中词w出现的文档数)

TF-IDF
将上面的TF-IDF相乘就得到了综合参数：TF-IDF=TF*IDF
'''